Object Oriented Programming systems and processes have been the subject of much investigation and interest in state of the art data processing environments. Object Oriented Programming is a computer program packaging technique which provides reusable and easily expandable programs. In contrast with known functional programming techniques which are not easily adaptable to new functional requirements and new types of data, object oriented programs are reusable and expandable as new requirements arise. With the ever increasing complexity of computer based systems, object oriented programming has received increased attention and investigation.
In an object oriented programming system, the primary focus is on data, rather than functions. Object oriented programming systems are composed of a large number of "objects" An object is a data structure and a set of operations or functions that can access that data structure. The data structure may be represented as a "frame". The frame has many "slots", each of which contains an "attribute" of the data in the slot. The attribute may be a primitive (i.e. an integer or string) or an Object Reference which is a pointer to the object's instance or instances (defined below). Each operation (function) that can access the data structure is called a "method".
FIG. 1 illustrates a schematic representation of an object in which a frame is encapsulated within its methods. FIG. 2 illustrates an example of an object, in which the data structure relates to employee data, and a number of methods surround this data structure. One method, for example, obtains the age of an employee. Each defined object will usually be manifested in a number of instances. Each instance contains the particular data structure for a particular example of the object. For example, an object for individual employee named Joyce Smith is an instance of the "employee" object.
Object oriented programming systems provide two primary characteristics which allow flexible and reusable programs to be developed. These characteristics are referred to as "encapsulation" and "inheritance". As may be seen from FIG. 1, the frame (data set) is encapsulated by its methods (functions). A wall of code has been placed around each piece of data. All access to the frame is handled by the surrounding methods. Data independence is thereby provided because an object's data structure is accessed only by its methods. Only the associated methods know the internal data structure. This ensures data integrity.
The "inheritance" property of object oriented programming systems allows previously written programs to be broadened by creating new superclasses and subclasses of objects. New objects are described by how they differ from preexisting objects so that entirely new programs need not be written to handle new types of data or functions.
FIG. 3 illustrates the inheritance property. For ease of illustration, the objects are illustrated as rectangles rather than as circles, with the object name at the top of a rectangle, the frame below the object name and the methods below the frame. Referring to FIG. 3, three object classes are illustrated for "salesperson", "employee" and "person", where a salesperson is a "kind of" employee, which is a "kind of" person. In other words, salesperson is a subclass of employee and employee is the superclass of salesperson. Similarly, employee is the subclass of person and person is the superclass of employee. Each class shown includes three instances. B. Soutter, W. Tipp and B. G. Blue are salespersons. B. Abraham, K. Yates and R. Moore are employees. J. McEnro, R. Nader and R. Reagan are persons. In other words, an instance is related to its class by an "is a" relation.
Each subclass "inherits" the frame and methods of its superclass. Thus, for example, a salesperson frame inherits age and hire date objects from the employee superclass as well as print and promote methods. Salesperson also includes a unique quota attribute and a pay commission method. Each instance can access all methods and frames of its superclass, so that, for example, B. G. Blue can be promoted.
In an object oriented system, a high level routine requests an object to perform one of its methods by sending the object a "message" telling the object what to do. The receiving object responds to the message by choosing the method that implements the message name, executing this method and then returning control to the calling high level routine, along with the results of the method.
Object oriented programming systems may be employed as database management systems which are capable of operating upon a large database, and which are expendable and adaptable. In an object oriented database management system, the data in the database is organized and encapsulated in terms of objects, with the instances of the objects being the data in the database. Similarly, the database manager may be organized as a set of objects with database management operations being performed by sending messages from one object to another. The target object performs the requested action on its attributes using its methods.
As described above, object oriented database management systems typically operate on large databases. However, it is difficult to manipulate the large database, or a large subset of the database which results from a database query, in order to view, update or delete selected elements therefrom. From a system perspective, the object oriented database, or the large query results, are a "boundless" data stream which is too large to fit in the system's memory, or into the portion of the system's memory allocated to an individual user.
As is well known to those having skill in the art, a data processor typically includes internal, volatile memory, often referred to as random access memory (RAM) or simply as "memory", which is available to the system for data manipulation. For multiuser systems, memory is typically divided among the users. Due to physical memory limitations, each user is limited to a maximum size of data stream which can be manipulated. In order to allow manipulation of data streams which exceed the maximum size, more memory must be provided, or a mechanism must be provided which creates the appearance of manipulating a boundless data stream without exceeding the physical limitations of the data processing environment.
Attempts have been made in prior art functionally programmed database management systems to provide the appearance of access to a boundless data stream by providing a "cursor" For example, in the Structured Query Language (SQL) database management system marketed by IBM Corporation as program product number 5470-XYR, a "cursor" is provided. The cursor is a file which provides forward pointers to a larger data stream. These forward pointers allow the data to be manipulated in the forward direction as one very large data stream. Operation of a cursor in an SQL database system is described in a publication entitled "IBM Database 2 Version 2 SQL Reference Release 1", IBM publication number SC26-4380-0, the disclosure of which is incorporated herein by reference.
Unfortunately an SQL cursor only allows a boundless data stream to be accessed or "scrolled" in the forward direction. Data manipulation often requires backward scrolling as well. In other words, bidirectional scrolling is required. Moreover, one particular SQL cursor may only be employed by one user at one time. Unfortunately, large database management systems often require multiuser capability. Finally, the SQL cursor is implemented in a functionally programmed database management system. A process and apparatus for bidirectional, multiuser manipulation of a boundless data stream in an object oriented database management system has heretofore not been available.